﻿/*****************************************************************//**
 * @file    GraphPostEventOperator.h
 * @brief   三维后处理可视对象数据操作器接口类。
 *  
 * @author  ChengHaotian (yeguangbaozi@foxmail.com)
 * @date    2024-11-21
 *********************************************************************/

#ifndef __GRAPHPOSTEVENTOPERATOR_H__
#define __GRAPHPOSTEVENTOPERATOR_H__

#include "FITK_Kernel/FITKCore/FITKAbstractOperator.h"

#include "OperatorsInterfaceAPI.h"

#include <QColor>
#include <QVariant>

// 前置声明
namespace Exchange
{
    class FITKAcousticsVTKGraphObject3D;
}

namespace Comp
{
    class FITKGraph3DWindowVTK;
}

namespace EventOper
{
    /**
     * @brief   三维后处理可视对象数据操作器接口类。
     * @author  ChengHaotian (yeguangbaozi@foxmail.com)
     * @date    2024-11-21
     */
    class OperatorsInterfaceAPI GraphPostEventOperator : public Core::FITKAbstractOperator
    {
        Q_OBJECT

    public:
        /**
         * @brief   构造函数。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-21
         */
        explicit GraphPostEventOperator() = default;

        /**
         * @brief   析构函数。[虚函数]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-21
         */
        virtual ~GraphPostEventOperator() = default;

        // 后处理渲染接口。
        //@{
        /**
         * @brief   更新后处理数据。[虚函数]
         * @param   postData：后处理数据[引用]
         * @param   name：数据名称
         * @param   rangeMin：数据范围最小值
         * @param   rangeMax：数据范围最大值
         * @param   graphWidget：三维窗口（为空则对第一个三维视口生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-21
         */
        virtual void updatePostData(QHash<QString, float> & postData, QString name,
            double rangeMin, double rangeMax, Comp::FITKGraph3DWindowVTK* graphWidget = nullptr);
        /**
         * @brief    设置是否启用对数颜色映射
         * @param[i] isOn                           是否启用
         * @param[i] graphWidget                    渲染窗口（渲染窗口为空时，默认使用当前激活窗口）
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-03-05
         */
        virtual void setEnableLogScale(bool isOn, Comp::FITKGraph3DWindowVTK* graphWidget = nullptr);
        /**
         * @brief    设置色带数量
         * @param[i] num                            色带数量
         * @param[i] graphWidget                    渲染窗口
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-03-06
         */
        virtual void setColorScalarNumber(int num, Comp::FITKGraph3DWindowVTK* graphWidget = nullptr);

        /**
         * @brief   取消后处理渲染。[虚函数]
         * @param   graphWidget：三维窗口（为空则对第一个三维视口生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-21
         */
        virtual void disablePostData(Comp::FITKGraph3DWindowVTK* graphWidget = nullptr);
        /**
         * @brief    设置范围颜色
         * @param[i] minRangeColor                   范围最小颜色
         * @param[i] maxRangeColor                   范围最大颜色
         * @param[i] transparency                    透明度（0-1）
         * @param[i] graphWidget                     三维窗口
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-03-06
         */
        virtual void setRangeColor(QColor minRangeColor, QColor maxRangeColor, double transparency, Comp::FITKGraph3DWindowVTK* graphWidget = nullptr);
        /**
         * @brief    设置超出范围的颜色
         * @param[i] color                            颜色 
         * @param[i] transparency                     透明度（0-1）
         * @param[i] graphWidget                      三维窗口
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-03-06
         */
        virtual void setAboveRangeColor(QColor color, double transparency, Comp::FITKGraph3DWindowVTK* graphWidget = nullptr);
        /**
         * @brief    设置低于范围的颜色
         * @param[i] color                            颜色
         * @param[i] transparency                     透明度（0-1）
         * @param[i] graphWidget                      三维窗口
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-03-06
         */
        virtual void setBelowRangeColor(QColor color, double transparency, Comp::FITKGraph3DWindowVTK* graphWidget = nullptr);
        //@}
    };
}   // namespace EventOper

#endif // __GRAPHPOSTEVENTOPERATOR_H__